package com.example.smartagrisys.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.smartagrisys.entity.Transaction;
import com.example.smartagrisys.vo.TransactionStatsVO;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 交易记录服务接口
 */
public interface TransactionService extends IService<Transaction> {

    /**
     * 获取用户的交易记录
     *
     * @param userId 用户ID
     * @return 交易记录列表
     */
    List<Transaction> getUserTransactions(Long userId);

    /**
     * 创建交易记录
     *
     * @param transaction 交易记录信息
     * @return 是否成功
     */
    boolean createTransaction(Transaction transaction);

    /**
     * 根据日期范围获取用户交易记录
     *
     * @param userId    用户ID
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 交易记录列表
     */
    List<Transaction> getTransactionsByDateRange(Long userId, String startDate, String endDate);

    /**
     * 获取用户的收入总额
     *
     * @param userId 用户ID
     * @return 收入总额
     */
    double getUserIncomeTotal(Long userId);

    /**
     * 获取用户的支出总额
     *
     * @param userId 用户ID
     * @return 支出总额
     */
    double getUserExpenseTotal(Long userId);

    /**
     * 根据用户ID获取交易记录
     *
     * @param userId 用户ID
     * @param startDate 开始日期（可选）
     * @param endDate 结束日期（可选）
     * @return 交易记录列表
     */
    List<Transaction> getTransactionsByUserId(Long userId, LocalDateTime startDate, LocalDateTime endDate);

    /**
     * 获取用户的交易统计数据
     *
     * @param userId 用户ID
     * @return 交易统计数据
     */
    TransactionStatsVO getTransactionStatsByUserId(Long userId);

    /**
     * 检查订单编号是否已存在交易记录
     *
     * @param orderNumber 订单编号
     * @return 是否存在
     */
    boolean existsByOrderNumber(String orderNumber);
} 